草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 为什么 cmath 不使用模板和/或重载

TR1在C++11中引入的许多新函数都有丑陋的类C签名。例如,引用Boost的TR1文档(http://www.boost.org/doc/libs/1_52_0/doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.special)://[5.2.1.1]associatedLaguerrepolynomials:doubleassoc_laguerre(unsignedn,unsignedm,doublex);floatassoc_laguerref(unsignedn,unsignedm,floatx);longd

c++ - 重载函数以接受模板指针变量

在main函数中调用时使用push方法。然而,即使主函数中的参数是一个指针,它仍然使用函数voidPush(constDATA_TYPE&newValue)。它不应该使用另一个接受指针的那个吗?如果有指针变量,如何更改第二个函数中的参数以覆盖第一个函数?templatevoidPush(constDATA_TYPE&newValue){//dostuff}templatevoidPush(constDATA_TYPE*newValue){//dostuff} 最佳答案 您的问题与常量有关。问题是,当您使用非常量对象指针调用Push(

c++ - 重载调用不明确

我有以下编译器错误:“重载‘reduceColors(ipl_image_wrapper&,ipl_image_wrapper&,int)’的调用不明确”我有一个IplImage(DrawingDetection.h)的包装类:#include#include#include#include#include#include"Utils.h"classipl_image_wrapper{public:typedefboost::shared_ptripl_image_ptr_t;ipl_image_wrapper(){}ipl_image_wrapper(IplImage*img):_i

C++ 对重载函数的奇怪模棱两可的调用

这个问题在这里已经有了答案:Whatis"Argument-DependentLookup"(akaADL,or"KoenigLookup")?(4个答案)关闭9年前。首先,这个问题纯属理论性质。我不是在寻找解决方案(我已经知道了),我只是在寻找解释。以下代码无法编译:structfoo{};voida(foo){}namespacefoobar{voida(foo){}voidb(foof){a(f);}}intmain(){return1;}MSVC++:1>c:\projects\codetests\main.cpp(7):errorC2668:'foobar::a':ambig

c++ - 如何从 operator new 或 malloc 为 mremap 获取页对齐内存

有没有办法分配一block内存,使其起始地址与给定的页面大小对齐?请注意,我不想在分配block后计算对齐地址。原因是在某些时候我将不得不在block上调用mremap():mremap要求旧地址参数是页面对齐的。 最佳答案 mremap只能安全地用于由mmap分配的内存区域,这些内存区域本质上是页面对齐的。在其他任何事情上使用它都是危险的(正式的,未定义的行为)并且可能看起来有效但可能会以您不会立即看到的方式严重破坏事物。 关于c++-如何从operatornew或malloc为mre

c++ - 最烦人的 friend ?友化专门的自由函数模板会引发编译错误(重载方法时)

代码我将问题简化为这个例子(粘贴为一个block以便于编译)///\briefThefree-functiontemplate,///whichisoverloadingamethodwiththesamenameinAbstractAbelow.templateinlineconstToverloadedMethod(constT&lhs,constT&rhs){returnT(lhs.value+rhs.value);}///\briefAbstractAclassclassAbstractA{public:AbstractA(intaVal):value(aVal){}inlin

C++运算符重载,我自己的字符串类

我正在尝试在C++11中创建我自己的字符串类,但我遇到了一些问题。将我的类与std::string类进行比较,我不知道如何使用std::string.at(int)='a';方法/重载。我在自己的类中创建了at(int)方法:intat(intindex){if(indexsize-1){throwstd::out_of_range("Error,indexoutofrange");}returndata[index];}如果我只使用它,效果很好:MyString.at(2);在主文件中:MyString="Helloworld!";//Worksfine!MyString.at(2)

c++ - 重载函数歧义

首先我要指出,这是我的第一个stackoverflow问题,所以请多多包涵。我在重载C++中的函数时遇到了一些问题。我正在尝试使用以下原型(prototype)创建一个函数:voidpush_at_command(std::string,std::vector,int);voidpush_at_command(std::string,std::vector,std::vector,int);voidpush_at_command(std::string,std::vector,std::vector,std::vector,int);voidpush_at_command(std::s

c++ - Cython 不能使用 operator()

当我尝试使用以下Cython代码时,我收到了我在最后发布的有关未定义operator()的错误。看来,当我尝试使用运算符时,Cython不会将其解释为成员函数(注意C++源代码中没有成员访问权限)。如果我尝试调用prng.operator()(),那么Cython将无法转换。在Cython中使用运算符重载是否需要一些特殊的东西?importnumpyasnpcimportnumpyasnpcdefexternfrom"ratchet.hpp"namespace"ratchet::detail":cdefcppclassRatchet:Ratchet()unsignedlongget64

c++ - 运算符重载中的 C++ 语法不清晰

我对C++还是个新手,正在尝试理解表达式模板。我在Wikipedia上看到了一个示例代码.我了解大部分程序及其工作原理,但我不清楚编译器如何解释这些行:operatorA&(){returnstatic_cast(*this);}operatorAconst&()const{returnstatic_cast(*this);}来自下面的基本表达式模板类。通常运算符重载的语法是return_datatypeoperator+(args){body}(例如for+operator)但是这会产生错误并且函数中的那些编译没有任何错误。谁能解释一下这两行?运算符之前的A&和Aconst&是做什么